package com.swanclouds.model.account;

import com.swanclouds.common.Buildable;
import com.swanclouds.model.ModelEntity;
import com.swanclouds.model.account.builder.UpdateAccountBuilder;
import com.swanclouds.model.common.redfish.Oem;

/**
 * 更新用户
 * @author 张立强
 * @version jdk1.8.0
 */
public interface UpdateAccount extends ModelEntity, Buildable<UpdateAccountBuilder> {
    /**
     * 用户名，大小写字母、数字、特殊符号“-”、“_”、“@”，字母开头
     * @return UserName
     */
    String getUserName();

    /**
     * 用户密码，长度为8到16个字符串
     * @return Password
     */
    String getPassword();

    /**
     * 用户角色，可设置的角色
     * BMC [Administrator,Operator,User,None]
     * HuaWei [Operator,Commonuser,Noaccess,CustomRole1...]
     * @return RoleId
     */
    String getRoleId();

    /**
     * 用户锁定状态
     * @return Locked [true: 锁定; false: 未锁定]
     */
    Boolean getLocked();

    /**
     * 用户使能状态
     * @return Enabled [true: 能用; false: 禁用]
     */
    Boolean getEnabled();

    /**
     * 自定义属性
     * "Oem":{
     *      "BMC":{
     *          "PasswordComplexityEnabled": password_complexity_enabled,
     *          "PasswordValidityDays": password_validity_days，
     *          "PasswordValidityRemindDays": password_validity_remind_days
     *      }
     *  }
     *  PasswordComplexityEnabled: 是否开启密码复杂度。当未下发该参数时，默认为false，不进行密码复杂度校验。true，开启，进行密码校验false，不开启，不进行密码校验
     *  PasswordValidityDays: 密码有效期，表示从用户创建开始，密码有效的天数。当未下发该参数，表示禁用密码有效期，此时密码一直有效
     *  PasswordValidityRemindDays: 密码有效期提醒天数
     *
     *  "Oem": {
     *     "Huawei":{
     *         "AccountInsecurePromptEnabled":"AccountInsecurePromptEnabled_value",
     *         "FirstLoginPolicy":"FirstLoginPolicy value",
     *         "LoginInterface":[
     *             "LoginInterface_value"
     *         ],
     *         "SnmpV3AuthProtocol":"SnmpV3AuthProtocol",
     *         "SnmpV3PrivProtocol":"SnmpV3PrivProtocol",
     *         "SnmpV3PrivPasswd":"password_value",
     *         "LoginRule":[
     *             "LoginRule_value"
     *         ]
     *     }
     * }
     * @return Map&lt;String, Object&gt; oem
     */
    Oem getOem();
}
